/*
 * Copyright (C) 2019 ~ 2022 Uniontech Software Technology Co.,Ltd.
 *
 * Author:     yanghongwei <yanghongwei@uniontech.com>
 *
 * Maintainer: yanghongwei <yanghongwei@uniontech.com>
 */

#pragma once

#include <QObject>
// 场景类型
enum SceneType {
    DefaultScene, // 默认场景（@note 新增默认场景类型，完善本地用户只需执行默认防火墙功能需求）
    InternalScene, // 内网场景
    RemoteScene, // 远程办公场景
    CloudDesktopScene, // 云桌面场景
};
class SwitchSceneModel : public QObject
{
    Q_OBJECT
public:
    enum class Scene {
        DefaultScene, // 默认场景（@note 新增默认场景类型，完善本地用户只需执行默认防火墙功能需求）
        InternalScene, // 内网场景
        RemoteScene, // 远程办公场景
        CloudDesktopScene, // 云桌面场景
        // 其它场景
        None = 255, // 无场景
    };
    SwitchSceneModel(QObject *parent = nullptr);
    ~SwitchSceneModel();

    Scene currentScene() { return m_currentScene; }
    bool canSwitchScene(const Scene &scene);
    void switchScene(const Scene &scene);

signals:
    void switchSceneFinished(bool successful, const Scene &scene);

private slots:
    void requestSwitchSceneFinished(int sceneType); // 请求切换场景结束结果反馈给客户端
    void timeOut();
    void networkChanged();

private:
    Scene m_currentScene; // 当前场所
    Scene m_waitScene; // 等待切换的场所
    Scene m_processScene; // 正在处理中的场所
    bool m_canConnectInternal; // 可以联通内网
};